package cn.tom.basic.service.impl;

import cn.tom.basic.service.IVerifyCodeService;
import org.springframework.stereotype.Service;

/**
 * 业务实现类：验证码
 */
@Service
public class VerifyCodeServiceImpl implements IVerifyCodeService {

   /* @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private UserMapper userMapper;

    @Override
    public void getPhoneCode(Map<String, String> map) {
        String phone = map.get("phone");
        String imageCode = map.get("imageCode"); //用户输入的验证码
        String imageCodeKey = map.get("imageCodeKey");
        //一.校验
        //1.空值校验
        if(StrUtil.isBlank(phone) || StrUtil.isBlank(imageCode)){
            throw new BusinessException("信息不能为空");
        }
        //2.图形验证码：是否过期+是否正确
        Object imgCodeObj = redisTemplate.opsForValue().get(imageCodeKey);
        if(imgCodeObj==null){
            throw new BusinessException("图形验证码过期");
        }
        if(!imageCode.equalsIgnoreCase(imgCodeObj.toString())){
            throw new BusinessException("图形验证码错误");
        }

        //3.手机号码是否已经注册过了
        User user = userMapper.findByPhone(phone);
        if(user != null){
            throw new BusinessException("该手机号已经被注册，请直接登录，忘记密码请联系管理员");
        }

        //二.手机短信验证码
        //1.直接获取redis的手机短信验证码【业务键:手机号 - code:时间戳】
        Object codeObj = redisTemplate.opsForValue().get("register:" + phone);
        //2.判断
        String code = null;
        if(codeObj == null){
            //2.1.为null=>第一次发送获取过期了：直接生成新的短信验证码
            code = StrUtils.getRandomString(4);
            code = RandomUtil.randomNumbers(4);
        }else{
            //2.2.不为null=有=>发送过没有过期=>校验是否过重发时间【当前系统时间-时间戳】
            long oldTime = Long.parseLong(codeObj.toString().split(":")[1]);
            if((System.currentTimeMillis() - oldTime)<1*60*1000){
                //a.相隔时间<60*1000：没有过重发时间 => 违规操作 => 抛异常
                throw new BusinessException("操作过于频繁，请稍后重试");
            }else{
                //b.>=60*1000：过了重发时间 => 直接使用没有过期的那一个【code:】，
                code = codeObj.toString().split(":")[0];
            }
        }
        redisTemplate.opsForValue().set("register:"+phone,
                code+":"+System.currentTimeMillis(),3, TimeUnit.MINUTES);
        //2.3.将验证码重新添加的redis，并刷新过期时间
        //三.调用发送短信工具类发送短信
        //SmsUtils.send(phone,"你的验证码是：【"+code+"】,请在3分钟内使用");
        System.out.println("你的验证码是：【"+code+"】,请在3分钟内使用");
    }

    *//**
     * 微信绑定时：获取手机短信验证码
     * @param map
     *//*
    @Override
    public void getBinderSmsCode(Map<String, String> map) {
        String phone = map.get("phone");
        //一.校验
        //1.空值校验
        if(StrUtil.isBlank(phone)){
            throw new BusinessException("手机号码不能为空");
        }

        //手机号码不验证 - 以前用账号注册过的可以直接绑定微信用户

        //二.手机短信验证码
        //1.直接获取redis的手机短信验证码【业务键:手机号 - code:时间戳】
        Object codeObj = redisTemplate.opsForValue().get("binder:" + phone);
        //2.判断
        String code = null;
        if(codeObj == null){
            //2.1.为null=>第一次发送获取过期了：直接生成新的短信验证码
            code = StrUtils.getRandomString(4);
            code = RandomUtil.randomNumbers(4);
        }else{
            //2.2.不为null=有=>发送过没有过期=>校验是否过重发时间【当前系统时间-时间戳】
            long oldTime = Long.parseLong(codeObj.toString().split(":")[1]);
            if((System.currentTimeMillis() - oldTime)<1*60*1000){
                //a.相隔时间<60*1000：没有过重发时间 => 违规操作 => 抛异常
                throw new BusinessException("操作过于频繁，请稍后重试");
            }else{
                //b.>=60*1000：过了重发时间 => 直接使用没有过期的那一个【code:】，
                code = codeObj.toString().split(":")[0];
            }
        }
        redisTemplate.opsForValue().set("binder:"+phone,
                code+":"+System.currentTimeMillis(),3, TimeUnit.MINUTES);
        //2.3.将验证码重新添加的redis，并刷新过期时间
        //三.调用发送短信工具类发送短信
        //SmsUtils.send(phone,"你的验证码是：【"+code+"】,请在3分钟内使用");
        System.out.println("你的验证码是：【"+code+"】,请在3分钟内使用");
    }*/

}
